/**
 * 文件名：auth.js
 * 功能：小程序用户认证 API 接口
 * 作用：封装登录、注册等认证接口
 * 模块关系：
 *   - 被登录页面调用：提交登录/注册请求
 *   - 依赖 http.js：发送 HTTP 请求
 *   - 使用 wx.setStorageSync：持久化存储 Token
 * 作者：白永康
 * 学号：2501210209
 */
const { post, get } = require('../utils/http')

/**
 * 用户登录
 * @param {string} username - 用户名
 * @param {string} password - 密码
 * @returns {Promise<Object>} 返回 { token, userId, username }
 */
async function login(username, password) {
  const data = await post('/auth/login', {
    data: { username, password }
  })
  
  // 保存到本地存储
  if (data && data.token) {
    wx.setStorageSync('token', data.token)
    wx.setStorageSync('userId', String(data.userId))
    wx.setStorageSync('username', data.username)
  }
  
  return data
}

/**
 * 用户注册
 * @param {string} username - 用户名
 * @param {string} password - 密码
 * @returns {Promise<Object>} 返回 { token, userId, username }
 */
async function register(username, password) {
  const data = await post('/auth/register', {
    data: { username, password }
  })
  
  // 注册成功后自动保存登录信息
  if (data && data.token) {
    wx.setStorageSync('token', data.token)
    wx.setStorageSync('userId', String(data.userId))
    wx.setStorageSync('username', data.username)
  }
  
  return data
}

/**
 * 获取当前用户信息（需要登录）
 * @returns {Promise<Object>} 返回用户信息
 */
async function getUserProfile() {
  const data = await get('/user/profile')
  return data
}

/**
 * 退出登录
 */
function logout() {
  wx.removeStorageSync('token')
  wx.removeStorageSync('userId')
  wx.removeStorageSync('username')
}

/**
 * 检查是否已登录
 * @returns {boolean}
 */
function isLoggedIn() {
  const token = wx.getStorageSync('token')
  return !!token
}

/**
 * 获取 Token
 * @returns {string}
 */
function getToken() {
  return wx.getStorageSync('token') || ''
}

module.exports = {
  login,
  register,
  getUserProfile,
  logout,
  isLoggedIn,
  getToken
}
